﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controller;


namespace GUI
{
    public partial class OpretOrdre : P_DesignParentForm
    {
        public OpretOrdre(bool NyOrdre)
        {
            InitializeComponent();
             //Sørger for at det er en fuldstændig frisk instans vi får at arbejde med.
                Vaerksted v = Vaerksted.GetInstance();
                if (NyOrdre)
                {

                    HentOrdreGroupBox.Enabled = false;
                    this.Text = "Opret ny ordre";
                    v.NyOrdre();

                }
                else
                {
                    HentOrdreGroupBox.Enabled = true;
                    this.Text = "Rediger ordre";
                }
                
        }

        private void OpretOrdre_Load(object sender, EventArgs e)
        {

            this.toolStripTextBox1.Text = "Opret Ordre";

        }

        

        private void HentOpretKundeButton_Click(object sender, EventArgs e)
        {
            Form f = new OpretKunde(false);
            f.StartPosition = FormStartPosition.CenterScreen;
            f.Width = 447;
            f.Height = 429;
            
            f.ShowDialog();
            Vaerksted v = Vaerksted.GetInstance();
            VisKundeInfo();

        }

        private void HentVareKatalogButton_Click(object sender, EventArgs e)
        {
           // Master master = new Master();
            //master.HentVareKatalog();
            VareKatalog vk = new VareKatalog();
            vk.ShowDialog();
            
        }

        private void HentVare(object sender, EventArgs e)
        {
            if (SBS.Valider.KunHelTal(VareNummerTextBox.Text))
            {
                Vaerksted v = Vaerksted.GetInstance();
                if (v.VKatalog.Varer.ContainsKey(Convert.ToInt32(VareNummerTextBox.Text)))
                {
                    VareNavnTextBox.Text = v.VKatalog.Varer[Convert.ToInt32(VareNummerTextBox.Text)].VareNavn;
                    VarePrisTextBox.Text = v.VKatalog.Varer[Convert.ToInt32(VareNummerTextBox.Text)].VarePris.ToString();
                }
            }
            else
                VareNavnTextBox.Text = "Ikke gyldigt varenummer";
            
        }

        private void FindMekanikerComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            List<SBS.ArbejdsOpgaver> kalender = v.HentMekanikerKalender((int)FindMekanikerComboBox.SelectedValue);
             
            var liste = from k in kalender select new { Dato = k.Dato, Opgaver = k.AntalOpgaver, Tidsforbrug = k.TidsForbrug };

            MekanikerKalenderDataGridView.DataSource = liste.ToList();

            v.TilfoejMekanikerTilOrdre((int)FindMekanikerComboBox.SelectedValue);
        }

        private void HentKundeButton_Click(object sender, EventArgs e)
        {
            
            Vaerksted v = Vaerksted.GetInstance();
            //Henter kundeinfo ind i aktivkunde objektet i kundekataloget
            if(SBS.Valider.KunDecimalTal(KundeNummertextBox.Text))
                v.HentKundeInfo(int.Parse(KundeNummertextBox.Text));
                
            if (v.Kkatalog.AktivKunde != null)
            {

                VisKundeInfo();
            }
            else
                MessageBox.Show("Kunde eksisterer ikke");
            


            
        }

        private void VisKundeInfo()
        {
            Vaerksted v = Vaerksted.GetInstance();
            KundeLabel.Text = v.Kkatalog.AktivKunde.ToString();
            KundeNummertextBox.Text = v.Kkatalog.AktivKunde.Knr.ToString(); ;
            //laver en liste med key-value pair af kundens scootere 
            List<KeyValuePair<string, string>> liste = new List<KeyValuePair<string, string>>();

            foreach (KeyValuePair<string, SBS.Scooter> pair in v.Kkatalog.AktivKunde.Scootere)
            {
                string MaerkeogModel = pair.Value.Certifikat.CertNavn + " - " + pair.Value.Model;
                liste.Add(new KeyValuePair<string, string>(pair.Value.RegNr, MaerkeogModel));
            }
            ScootercomboBox.ValueMember = "Key";
            ScootercomboBox.DisplayMember = "Value";

            ScootercomboBox.DataSource = liste;
        }

        private void ScootercomboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            v.Obog.AktivOrdre.SetKundesScooter(v.Kkatalog.AktivKunde.Scootere[ScootercomboBox.SelectedValue.ToString()]);
            int i = v.Kkatalog.AktivKunde.Scootere[ScootercomboBox.SelectedValue.ToString()].Certifikat.CertNr;
            v.HentMekanikere(i);

            List<KeyValuePair<int, string>> liste = new List<KeyValuePair<int, string>>();

            foreach (KeyValuePair<int, SBS.Mekaniker> pair in v.Mkatalog.Mekanikere)
            {
                liste.Add(new KeyValuePair<int, string>(pair.Key, pair.Value.MekNavn));
            }

            FindMekanikerComboBox.ValueMember = "Key";
            FindMekanikerComboBox.DisplayMember = "Value";
            FindMekanikerComboBox.DataSource = liste;
        }

        private void TilfoejOrdreLinie(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if (SBS.Valider.KunDecimalTal(VareAntalTextBox.Text) && SBS.Valider.KunDecimalTal(VareNummerTextBox.Text) && SBS.Valider.KunDecimalTal(VarePrisTextBox.Text))
            {
                double Totalpris = v.TilfoejOrdreLinie(new SBS.OrdreLinie(v.VKatalog.Varer[int.Parse(VareNummerTextBox.Text)],0,int.Parse(VareAntalTextBox.Text), double.Parse(VarePrisTextBox.Text)));

                OpdaterVareKurv();
                ClearVareTextBoxe();
            }
            else
                MessageBox.Show("Der er en fejl i varelinien, og den kan derfor ikke tilføjes ordren");
        }

        private void OpdaterVareKurv()
        {
            Vaerksted v = Vaerksted.GetInstance();
            var OrdreLinieListe = from  ol in v.Obog.AktivOrdre.OrdreLinier select new{Antal = ol.Antal,Beskrivelse = ol.VareIOrdreLinien.VareNavn, á = ol.SolgtTilPris, Totalpris = ol.SolgtTilPris*ol.Antal};
            OrdreLinierDataGridView.DataSource = OrdreLinieListe.ToList();
            OrdreSumTextBox.Text = v.Obog.AktivOrdre.HentOrdrensTotalPris().ToString();

        }

        private void ClearVareTextBoxe()
        {
            VareAntalTextBox.Text = "1" ;
            VareNavnTextBox.Clear();
            VareNummerTextBox.Clear();
            VarePrisTextBox.Clear();

        }

        private void FindMekanikerDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if(sender.Equals(MekanikerKalenderDataGridView))
                FindMekanikerDateTimePicker.Value = DateTime.Parse(MekanikerKalenderDataGridView.Rows[MekanikerKalenderDataGridView.CurrentRow.Index].Cells[0].Value.ToString());

            v.Obog.AktivOrdre.UdforsDato = FindMekanikerDateTimePicker.Value;
            ResevereScooterComboBox.ValueMember = "Key";
            ResevereScooterComboBox.DisplayMember = "Value";
            ResevereScooterComboBox.DataSource = v.HentUdlejningsStatus(FindMekanikerDateTimePicker.Value);
            if (ResevereScooterComboBox.Items.Count > 0)
                ReserverScooterCheckBox.Visible = true;
            else
                ResevereScooterComboBox.Items.Add("Ingen ledige");
        }

        private void FjernOrdreLinieButton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            v.Obog.AktivOrdre.OrdreLinier.RemoveAt(OrdreLinierDataGridView.CurrentRow.Index);
            OpdaterVareKurv();
        }

        private void RetOrdreLinieButton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            VareAntalTextBox.Text = v.Obog.AktivOrdre.OrdreLinier[OrdreLinierDataGridView.CurrentRow.Index].Antal.ToString();
            VareNummerTextBox.Text = v.Obog.AktivOrdre.OrdreLinier[OrdreLinierDataGridView.CurrentRow.Index].VareIOrdreLinien.VareNr.ToString();
            VareNavnTextBox.Text = v.Obog.AktivOrdre.OrdreLinier[OrdreLinierDataGridView.CurrentRow.Index].VareIOrdreLinien.VareNavn;
            VarePrisTextBox.Text = v.Obog.AktivOrdre.OrdreLinier[OrdreLinierDataGridView.CurrentRow.Index].SolgtTilPris.ToString();
            v.Obog.AktivOrdre.OrdreLinier.RemoveAt(OrdreLinierDataGridView.CurrentRow.Index);
            OpdaterVareKurv();

        }

        private void GemOrdreButton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if (v.GemOrdre(false))
            {
                v = Vaerksted.ResetInstance();
                Close();
            }
            else
                MessageBox.Show("Der skete en fejl under skrivning til databasen");
        }

        private void ReserverScooterCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();

            if (ReserverScooterCheckBox.Checked)
                v.Obog.AktivOrdre.Udlejning = new SBS.Udlejning(FindMekanikerDateTimePicker.Value, (string)ResevereScooterComboBox.SelectedValue);
            else
                v.Obog.AktivOrdre.Udlejning = null;
        }

        private void MekanikerKalenderDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            FindMekanikerDateTimePicker_ValueChanged(sender, e);

        }

        private void KontantSalgbutton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if (v.GemOrdre(true))
            {
                v = Vaerksted.ResetInstance();
                Close();
            }
            else
                MessageBox.Show("Der skete en fejl under skrivning til databasen");
        }

        

       

       
    }
}
